#ifndef __LINKLIST_H_
#define __LINKLIST_H_

#define ElementType int

//节点
struct Node
{
    ElementType data;//数据域
    Node * next;//指针域   //不写struct，c++里node自成一个类型
};

class LinkList
{
public:
    LinkList();
    ~LinkList();
//尾部插入
    void InsertTail(ElementType element);
//头插法:插入的数字是反的
    void InsertHead(ElementType element);
//按位置插入
    void InsertByIndex(int index, ElementType element);
//按位置删除
    void RemoveByIndex(int index);
//按值删除
    void RemoveByElement(ElementType element);
//按位置修改
    void UpdataByIndex(int index,ElementType newValue);
//按值修改
    void UpdataByElement(ElementType oldValue, ElementType newvalue);
//按位置查找值
    ElementType& operator[](int index);//加引用就可以改该位置的值，为啥
//冒泡排序
    void BubbleSort();
//调用快速排序
    void FastSort();//进行调用
//归并排序
    LinkList Merge(const LinkList & l);
//链表的逆序
    void Reserve();
//调用逆序的递归写法
    void Reserve2();
    

    
    Node* GetEnd();
    void show();//也可以叫travel

    /* 获取链表元素个数*/
    int getSize();

private:
    void FastSort(Node * start, Node * end);    //封装快排
    Node * Reserve2(Node * node);   //封装逆序的递归写法
    Node * head;    //头指针  //找到头部就找到了后面的  //虚拟头节点
    Node * tail;    //尾指针
    int size;   //节点数量
};


#endif